import axios from "axios";
import { useStore } from "@/stores/userInfo";
import { ElMessage } from "element-plus";
import { getToken } from "@/utils/auth"; // 导入getToken函数

// 定义通用的 API 响应结构
export interface ApiResponse<T> {
  IsSuc: boolean;
  Msg: string;
  Code: number;
  Data: T;
}

//创建axios实例
const axiosInstance = axios.create({
    baseURL:"http://127.0.0.1:5150/",//网关5150
    timeout:100000,//等待时间  100s
});


//请求拦截器
axiosInstance.interceptors.request.use(
    (config) => {
      // 在请求发送之前做些什么
      // console.log("Request Interceptor:", config);
  
      // 从localStorage获取token
      const token = getToken();
      if (token) {
        config.headers["Authorization"] = `Bearer ${token}`; // 设置请求头
      }
  
      return config;
    },
    (error) => {
      // 对请求错误做些什么
      return Promise.reject(error);
    }
  );
  
  //响应拦截器
  axiosInstance.interceptors.response.use(
    (response) => {
      // 检查是否为导出文件请求
      if (response.config.url?.includes('/ExportUser') || 
          response.headers['content-type']?.includes('application/octet-stream') || 
          response.headers['content-disposition']?.includes('attachment')) {
        return response; // 直接返回完整响应对象，不做处理
      }
      
      // 如果是blob类型，直接返回response.data
      if (response.config.responseType === 'blob') {
        return response.data;
      }

      const data = response.data;
      
      // 特殊处理图片上传接口的响应，确保其返回格式符合前端预期
      if (response.config.url?.includes('BaseDataWriteAPI/MeetingRoom/Upload') && data && data.filePath) {
          return {
              IsSuc: true,
              Data: data, // data在这里就是 { fileName: ..., filePath: ... }
              Msg: '图片上传成功',
              Code: 200
          };
      }
      
      // 处理布尔值响应（用于验证码验证等接口）
      if (typeof data === 'boolean') {
        return {
          IsSuc: data,
          Data: data,
          Msg: data ? '成功' : '失败',
          Code: data ? 200 : 400
        };
      }
      
      // 如果是字符串且可以解析为布尔值
      if (typeof data === 'string' && (data.toLowerCase() === 'true' || data.toLowerCase() === 'false')) {
        const boolValue = data.toLowerCase() === 'true';
        return {
          IsSuc: boolValue,
          Data: boolValue,
          Msg: boolValue ? '成功' : '失败',
          Code: boolValue ? 200 : 400
        };
      }

      //如果请求失败的话
      if (data && !data.IsSuc) {
        console.log("请求失败", response);
        ElMessage.error(data.Msg || '请求失败');
        return Promise.reject(new Error(data.Msg || '请求失败'));
      }
  
      return data;
    },
    (error) => {
      //处理不同状态码的错误请求
      const { response, message } = error;
  
      if (response) {
        switch (response.status) {
          case 401:
            ElMessage.error("未授权，请重新登录！");
            // 清除token和用户信息，并跳转到登录页
            setTimeout(() => {
              localStorage.removeItem('user_info');
              localStorage.removeItem('access_token');
              window.location.href = '/';
            }, 1500);
            break;
          case 403:
            ElMessage.error("没有权限，禁止访问！");
            break;
          case 404:
            ElMessage.error("请求的资源不存在！");
            break;
          case 500:
            ElMessage.error("服务器内部错误！");
            break;
          default:
            ElMessage.error(`请求失败：${response.status}`);
        }
      } else {
        // 处理请求未响应的情况
        if (message.includes("timeout")) {
          ElMessage.error("请求超时，请稍后重试！");
        } else if (message.includes("Network Error")) {
          ElMessage.error("网络错误，请检查您的网络连接！");
        } else {
          ElMessage.error(`请求失败：${message}`);
        }
      }
  
      return Promise.reject(error);
    }
  );
  
  //导出axios实例
  export default axiosInstance;